package com.bbva.gptf.back.transformador;

import java.math.BigDecimal;
import java.util.List;

import org.springframework.core.convert.converter.Converter;

import com.bbva.gptf.dto.bean.InstrumentosSimulacion;

/**
 * @author Javier Estrella
 * @version 1.0
 * @created 06-mar-2013 17:00:22
 */
public class TransformadorSimulacionToString implements
		Converter<List<InstrumentosSimulacion>, String> {

	private Boolean titulosOperar;
	
	public TransformadorSimulacionToString(Boolean titulosOperar) {
		this.titulosOperar = titulosOperar;
	}
	
	@Override
	public String convert(final List<InstrumentosSimulacion> lista) {
		StringBuilder cadena = new StringBuilder("");
		String info = null;
		BigDecimal monto;
		for (final InstrumentosSimulacion is : lista) {
			if (is.getTpNivel() == 3L) {
				if (this.titulosOperar) {
					if (!is.getTitulosOperar().equals(is.getTitulosOperarOr())) {
						is.setCtCfTitulo(is.getCtCaTitulo() + is.getTitulosOperar());
					} else if (!is.getPorcentajeOperar().equals(is.getPorcentajeOperarOr())) {
						monto = (is.getPorcentajeOperar().multiply(is.getImCaValCartera())).
							divide(BigDecimal.valueOf(100D), 2, BigDecimal.ROUND_HALF_UP);
						monto.divide(is.getImCfPrecio(), 2, BigDecimal.ROUND_FLOOR);
						is.setCtCfTitulo(monto.divide(is.getImCfPrecio(), 2, BigDecimal.ROUND_FLOOR).longValue());
					}
					
				}
				cadena = cadena.append(is.getCdContrato());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getNbClasificacion());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getTpContrato());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getCdValorBmv());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getCdEmisora());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getCdSerie());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getImCaMonto());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getPcCaIntegracion());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getNuCaDelta());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getNuCaContribucion());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getNuCaTasa());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getImCaPrecio());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getCtCaTitulo());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getImCaLiquidez());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getImCaValCartera());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getPcCaBenchmark());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getPcCaConbenchmark());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getPcCaDifintegra());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getNuCaPonderacion());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getCtCfTitulo());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getImCfPrecio());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getImCfMonto());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getImCfLiquidez());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getPcCfIntegracion());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getNuCfDelta());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getNuCfContribucion());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getNuCfTasa());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getImCfValCartera());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getPcCfBenchmark());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getPcCfConbenchmark());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getPcCfDifintegra());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getNuCfPonderacion());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getImCfMontoOperar());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getCdGrupoDelta());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getTpNivel());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getTpTenencia());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getNbGrupoDelta());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getCtCfTituloOr());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getImCfMontoOr());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getImSaldoContable());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getImPrecioSucio());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getImValorNominal());
				cadena = cadena.append(";");
				cadena = cadena.append(is.getCalcular() != null && is.getCalcular() == false ? "0" : "1");
				cadena = cadena.append(";");
				cadena = cadena.append(is.getTpMercado());
				cadena = cadena.append(";");
				cadena = cadena.append("|");
			}
		}
		info = cadena.toString().replace("null", "");
		return info;
	}

}